home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / util / app / WReplaceIcon.lha / WReplaceIcon / WReplaceIcon.e < prev    next >
Text File  |  1999-02-13  |  6KB  |  199 lines

  1. -> WReplaceIcon V1.0 by Jilles Tjoelker 1999-02-13
  2. -> Requires V41 BGUI modules, though V40 library should work 
  3. -> TAB=2
  4.  
  5. OPT PREPROCESS,OSVERSION=37
  6.  
  7. MODULE 'bgui','libraries/bgui','libraries/bguic','libraries/bgui_macros',
  8.              'tools/boopsi','utility/tagitem','intuition/screens',
  9.              'intuition/gadgetclass','intuition/classusr','intuition/intuition',
  10.              'intuition/classes','workbench/workbench','icon',
  11.              'workbench/startup'
  12.  
  13. ENUM ID_NULL,ID_SRC,ID_ABOUT
  14.  
  15. ENUM ERR_NONE,ERR_LIB,ERR_GUI,ERR_WIN
  16.  
  17. RAISE ERR_LIB IF OpenLibrary()=NIL
  18.  
  19. DEF wd_obj=NIL,sig,done,wnd
  20.  
  21. PROC bguireq(title,text,gadgets,args=NIL)
  22.     DEF rq:bguirequest
  23.     rq.flags:=BREQF_AUTO_ASPECT OR BREQF_LOCKWINDOW OR
  24.         (IF InStr(gadgets,'*')<>-1 THEN BREQF_FAST_KEYS ELSE 0)
  25.     rq.title:=title
  26.     rq.gadgetformat:=gadgets
  27.     rq.textformat:=text
  28.     rq.reqpos:=POS_CENTERMOUSE
  29.     rq.textattr:=NIL
  30.     rq.underscore:="_"
  31.     rq.reserved0:=0
  32.     rq.screen:=NIL -> NOP
  33.     rq.reserved1:=0
  34. ENDPROC BgUI_RequestA(wnd,rq,args)
  35.  
  36. INT 0
  37. verstag:
  38. CHAR '$VER: WReplaceIcon 1.0 (13.2.99)',0
  39.  
  40. PROC main() HANDLE
  41.     DEF amsg:PTR TO appmessage,wa:PTR TO wbarg,cd
  42.     DEF name[256]:STRING
  43.     DEF rc,i
  44.     DEF oldgadget:gadget
  45.     DEF g_Src,g_Dest,g_About
  46.     DEF diskobj_src=NIL:PTR TO diskobject,
  47.             diskobj_dst=NIL:PTR TO diskobject
  48.     DEF maxw=100,maxh=60,img:PTR TO image
  49.     iconbase:=OpenLibrary('icon.library',37)
  50.     bguibase:=OpenLibrary('bgui.library',40) -> WM_WHICHOBJECT requires V40
  51.     wd_obj:=WindowObject,
  52.         WINDOW_Title,'WReplaceIcon by JT',
  53.         WINDOW_RMBTrap,TRUE,
  54.         WINDOW_AutoAspect,TRUE,
  55.         WINDOW_Position,POS_CENTERMOUSE,
  56.         WINDOW_ScaleWidth,0,
  57.         WINDOW_ScaleHeight,0,
  58.         WINDOW_AppWindow,TRUE,
  59.         WINDOW_CloseOnEsc,TRUE,
  60.         WINDOW_MasterGroup,
  61.             VGroupObject,Spacing(4),HOffset(4),VOffset(4),
  62.                 StartMember,HGroupObject,Spacing(4),
  63.                     StartMember,g_Src:=ButtonObject,
  64.                         FRM_Type,FRTYPE_DROPBOX,
  65.                         FRM_Recessed,FALSE,
  66.                         LAB_Label,'_Source',
  67.                         LAB_Place,PLACE_ABOVE,
  68.                         GA_ID,ID_SRC,
  69.                         BUTTON_Image,[0,0,maxw,maxh,0,NIL,0,0,NIL]:image,
  70.                     EndObject,EndMember,
  71.                     StartMember,g_Dest:=InfoObject,
  72.                         FRM_Type,FRTYPE_DROPBOX,
  73.                         FRM_Recessed,FALSE,
  74.                         LAB_Label,'Destination',
  75.                         LAB_Place,PLACE_ABOVE,
  76.                     EndObject,EndMember,
  77.                 EndObject,EndMember,
  78.                 StartMember,g_About:=ButtonObject,
  79.                     LAB_Label,'_About',
  80.                     GA_ID,ID_ABOUT,
  81.                     ButtonFrame,
  82.                     FRM_Recessed,FALSE,
  83.                 EndObject,FixMinHeight,EndMember,
  84.             EndObject,EndMember,
  85.     EndObject
  86.     IF wd_obj=NIL THEN Raise(ERR_GUI)
  87.     GadgetKey(wd_obj,g_Src,'s')
  88.     GadgetKey(wd_obj,g_About,'a')
  89.     wnd:=WindowOpen(wd_obj)
  90.     IF wnd=NIL THEN Raise(ERR_WIN)
  91.     GetAttr(WINDOW_SigMask,wd_obj,{sig})
  92.     GetAttr(WINDOW_AppMask,wd_obj,{i})
  93.     sig:=sig OR i
  94.     done:=FALSE
  95.     WHILE done=FALSE
  96.         Wait(sig)
  97.         WHILE (rc:=HandleEvent(wd_obj))<>WMHI_NOMORE
  98.             SELECT rc
  99.                 CASE WMHI_CLOSEWINDOW; done:=TRUE
  100.                 CASE ID_ABOUT; about()
  101.             ENDSELECT
  102.         ENDWHILE
  103.         WHILE amsg:=GetAppMsg(wd_obj)
  104.             rc:=NIL
  105.             IF amsg.numargs THEN rc:=domethod(wd_obj,[WM_WHICHOBJECT])
  106.             IF rc=g_Src
  107.                 IF diskobj_src THEN FreeDiskObject(diskobj_src)
  108.                 diskobj_src:=NIL
  109.                 wa:=amsg.arglist[0]
  110.                 diskobj_src:=getdiskobj(wa,name)
  111.                 IF diskobj_src
  112.                     img:=diskobj_src.gadget.gadgetrender
  113.                     IF img.width>maxw OR (img.height>maxh) THEN img:=NIL
  114.                     SetGadgetAttrsA(g_Src,wnd,NIL,[BUTTON_Image,img,0])
  115.                     IF diskobj_src.gadget.selectrender
  116.                         img:=diskobj_src.gadget.selectrender
  117.                         IF img.width>maxw OR (img.height>maxh) THEN img:=NIL
  118.                         SetGadgetAttrsA(g_Src,wnd,NIL,[BUTTON_SelectedImage,img,0])
  119.                     ELSE
  120.                         SetGadgetAttrsA(g_Src,wnd,NIL,[BUTTON_SelectedImage,img,0])
  121.                     ENDIF
  122.                 ELSE
  123.                     SetGadgetAttrsA(g_Src,wnd,NIL,[BUTTON_Image,NIL,BUTTON_SelectedImage,NIL,0])
  124.                     bguireq(NIL,'Can''t get source icon!','*_OK')
  125.                 ENDIF
  126.             ELSEIF rc=g_Dest
  127.                 IF diskobj_src
  128.                     IF diskobj_dst THEN FreeDiskObject(diskobj_src)
  129.                      diskobj_dst:=NIL
  130.                     FOR i:=0 TO amsg.numargs-1
  131.                         IF diskobj_dst:=getdiskobj(amsg.arglist[i],name)
  132.                             CopyMem(diskobj_dst.gadget,oldgadget,SIZEOF gadget)
  133.                             CopyMem(diskobj_src.gadget,diskobj_dst.gadget,SIZEOF gadget)
  134.                             cd:=CurrentDir(amsg.arglist[i].lock)
  135.                             IF PutDiskObject(name,diskobj_dst)=0
  136.                                 -> avoid Skip/Abort choice when it doesn't matter
  137.                                 IF bguireq(NIL,'Unable to write back icon.',
  138.                                     IF i=(amsg.numargs-1) THEN '*_OK' ELSE '*_Skip|_Abort')=
  139.                                     0 THEN i:=amsg.numargs
  140.                             ENDIF
  141.                             CurrentDir(cd)
  142.                             CopyMem(oldgadget,diskobj_dst.gadget,SIZEOF gadget)
  143.                             FreeDiskObject(diskobj_dst); diskobj_dst:=NIL
  144.                         ELSE
  145.                             IF bguireq(NIL,'Can''t get icon!',
  146.                                 IF i=(amsg.numargs-1) THEN '*_OK' ELSE '*_Skip|_Abort')=
  147.                                 0 THEN i:=amsg.numargs -> can't use EXIT inside IF
  148.                         ENDIF
  149.                     ENDFOR
  150.                 ELSE
  151.                     DisplayBeep(0)
  152.                 ENDIF
  153.             ELSE
  154.                 DisplayBeep(0)
  155.             ENDIF
  156.             ReplyMsg(amsg)
  157.         ENDWHILE
  158.     ENDWHILE
  159. EXCEPT DO
  160.     IF wd_obj THEN DisposeObject(wd_obj)
  161.     IF bguibase THEN CloseLibrary(bguibase)
  162.     IF diskobj_dst THEN FreeDiskObject(diskobj_dst)
  163.     IF diskobj_src THEN FreeDiskObject(diskobj_src)
  164.     IF iconbase THEN CloseLibrary(iconbase)
  165.     SELECT exception
  166.         CASE ERR_LIB; WriteF('Error: could not open icon or BGUI library.\n')
  167.         CASE ERR_GUI; WriteF('Error: could not create GUI object.\n')
  168.         CASE ERR_WIN; WriteF('Error: could not open window.\n')
  169.     ENDSELECT
  170. ENDPROC
  171.  
  172. PROC getdiskobj(wa:PTR TO wbarg,name:PTR TO CHAR)
  173.     DEF do=NIL:PTR TO diskobject,cd
  174.     StrCopy(name,wa.name)
  175.     IF name[]
  176.         cd:=CurrentDir(wa.lock)
  177.         do:=GetDiskObjectNew(name)
  178.         CurrentDir(cd)
  179.     ELSE -> drawer, garbage or disk
  180.         IF NameFromLock(wa.lock,name,StrMax(name))
  181.             SetStr(name,StrLen(name))
  182.             IF name[EstrLen(name)-1]=":" THEN StrAdd(name,'disk')
  183.             do:=GetDiskObjectNew(name)
  184.         ENDIF
  185.     ENDIF
  186. ENDPROC do
  187.  
  188. PROC about()
  189.     bguireq('About WReplaceIcon',
  190.         '\ec\s\n'+
  191.         'Freeware\n'+
  192.         'Copyright © 1999 Jilles Tjoelker\n\n'+
  193.         '\ebE-mail:\n\enM.Tjoelker@nl.cis.philips.com\n\n'+
  194.         '\ebSnail mail:\en\nJilles Tjoelker\n'+
  195.         'Craterlaan 6\n'+
  196.         '5632 AG Eindhoven\n'+
  197.         'THE NETHERLANDS','*_OK',[{verstag}+6])
  198. ENDPROC
  199.